#! /usr/bin/env/python
# -*- coding=UTF-8 -*-
# 数据库公共类
# 注：此类执行结果将按照c语言的结果返回，执行成功返回0，执行失败返回状态码
import pymysql


class DataBaseHandle(object):
    ''' 定义一个 MySQL 操作类'''


    def __init__(self,host,username,password,database,port):
        '''初始化数据库信息并创建数据库连接'''
        self.host = host
        self.username = username
        self.password = password
        self.database = database
        self.port = port
        self.db = pymysql.connect(self.host,self.username,self.password,self.database,self.port,charset='utf8')





    #插入单条数据
    def insertDB(self,sql):
        ''' 插入数据库操作 '''

        self.cursor = self.db.cursor()

        try:
            # 执行sql
            self.cursor.execute(sql)
            self.db.commit()
        except:
            # 发生错误时回滚
            self.db.rollback()
        finally:
            self.cursor.close()


    #删除单条数据
    def deleteDB(self,sql):
        ''' 操作数据库数据删除 '''
        self.cursor = self.db.cursor()

        try:
            # 执行sql
            return self.cursor.execute(sql)
        except:
            # 发生错误时回滚
            self.db.rollback()
        finally:
            self.cursor.close()




    #更新单条数据
    def updateDB(self,sql):
        ''' 更新数据库操作 '''

        self.cursor = self.db.cursor()

        try:
            # 执行sql
            return self.cursor.execute(sql)
            self.db.commit()
        except:
            # 发生错误时回滚
            self.db.rollback()
        finally:
            self.cursor.close()




    #查询数据
    def selectDB(self,sql):
        ''' 数据库查询 '''
        self.cursor = self.db.cursor()
        try:
            self.cursor.execute(sql) # 返回 查询数据 条数 可以根据 返回值 判定处理结果

            res = self.cursor.fetchall() # 返回所有记录列表
            return res
        except:
            print('Error: unable to fecth data')
        finally:
            self.cursor.close()


    def closeDB(self):
        ''' 数据库连接关闭 '''
        self.db.close()


if __name__ == '__main__':

    DbHandle = DataBaseHandle('127.0.0.1','root','','blog',3306)
    insertSql = "insert into name(name)values('hahha')"
    DbHandle.insertDB(insertSql)
    delSql = "delete from name where id = 1"
    DbHandle.deleteDB(delSql)

    DbHandle.closeDB()

